package com.ym.b2b.order.xc;  
  
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStream;
import java.net.SocketException;
import java.util.List;

import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.apache.commons.net.ftp.FTPClient;
import org.apache.commons.net.ftp.FTPReply;

import com.ym.b2b.order.xc.sqlbean.DataPackageERP;  
  
/**
 * 
* @ClassName: FtpUtil 
* @Description: 宣城FTP连接工具
* @Author cym
* @Date 2017年8月23日 上午8:49:44 
* @Modify  
* @CopyRight 珍诚医药在线股份有限公司
 */
public class FtpUtil {  
  
    private final static Log logger = LogFactory.getLog(FtpUtil.class);  
  
    private final static String ftpHost = "192.168.0.200";
    private final static String ftpUserName = "tpgl";
    private final static String ftpPassword = "tpgl";
    private final static int ftpPort =21;
    /** 
     * 获取FTPClient对象 
     * 
     * @param ftpHost 
     *            FTP主机服务器 
     * @param ftpPassword 
     *            FTP 登录密码 
     * @param ftpUserName 
     *            FTP登录用户名 
     * @param ftpPort 
     *            FTP端口 默认为21 
     * @return 
     */  
    public static FTPClient getFTPClient() {  
        FTPClient ftpClient = new FTPClient();  
        try {  
            ftpClient = new FTPClient();  
            ftpClient.connect(ftpHost, ftpPort);// 连接FTP服务器  
            ftpClient.login(ftpUserName, ftpPassword);// 登陆FTP服务器  
            if (!FTPReply.isPositiveCompletion(ftpClient.getReplyCode())) {  
                logger.info("未连接到FTP，用户名或密码错误。");  
                ftpClient.disconnect();  
            } else {  
                logger.info("FTP连接成功。");  
            }  
        } catch (SocketException e) {  
            e.printStackTrace();  
            logger.info("FTP的IP地址可能错误，请正确配置。");  
        } catch (IOException e) {  
            e.printStackTrace();  
            logger.info("FTP的端口错误,请正确配置。");  
        }  
        return ftpClient;  
    }  
  
    /* 
     * 从FTP服务器下载文件 
     *  
     * @param ftpHost FTP IP地址 
     *  
     * @param ftpUserName FTP 用户名 
     *  
     * @param ftpPassword FTP用户名密码 
     *  
     * @param ftpPort FTP端口 
     *  
     * @param ftpPath FTP服务器中文件所在路径 格式： ftptest/aa 
     *  
     * @param localPath 下载到本地的位置 格式：H:/download 
     *  
     * @param fileName 文件名称 
     */  
    public static void downloadFtpFile(String ftpHost, String ftpUserName,  
            String ftpPassword, int ftpPort, String ftpPath, String localPath,  
            String fileName) {  
  
        FTPClient ftpClient = null;  
  
        try {  
            ftpClient = getFTPClient();  
            ftpClient.setControlEncoding("UTF-8"); // 中文支持  
            ftpClient.setFileType(FTPClient.BINARY_FILE_TYPE);  
            ftpClient.enterLocalPassiveMode();  
            ftpClient.changeWorkingDirectory("/");  
            ftpClient.changeWorkingDirectory(ftpPath);  
            
            File localFile = new File(localPath + File.separatorChar + fileName);  
            OutputStream os = new FileOutputStream(localFile);  
            ftpClient.retrieveFile(fileName, os);  
            os.close();  
            ftpClient.logout();  
  
        } catch (FileNotFoundException e) {  
            logger.error("没有找到" + ftpPath + "文件");  
            e.printStackTrace();  
        } catch (SocketException e) {  
            logger.error("连接FTP失败.");  
            e.printStackTrace();  
        } catch (IOException e) {  
            e.printStackTrace();  
            logger.error("文件读取错误。");  
            e.printStackTrace();  
        }  finally {
            if(ftpClient.isConnected()) {
                try {
                	ftpClient.disconnect();
                } catch(IOException ioe) {
                }
              }
        } 
  
    }  
  
    /* 
     * 批量从FTP服务器下载文件 (宣城特制)
     * @param ftpHost FTP IP地址 
     * @param ftpUserName FTP 用户名 
     * @param ftpPassword FTP用户名密码 
     * @param ftpPort FTP端口 
     * @param ftpPath1 FTP服务器中文件所在路径 格式： ftptest/aa 
     * @param ftpPath2s FTP服务器中文件所在路径 格式： ftptest/aa 
     * @param localPath 下载到本地的位置 格式：H:/download 
     * @param fileNames 文件名称 
     */  
    public static void downloadFtpFiles(List<DataPackageERP> list, String localPath) {  
        FTPClient ftpClient = null;  
        try {  
            ftpClient = getFTPClient();  
            ftpClient.setControlEncoding("UTF-8"); // 中文支持  
            ftpClient.setFileType(FTPClient.BINARY_FILE_TYPE);  
            ftpClient.enterLocalPassiveMode();  

            // 文件夹不存在则创建
            File file =new File(localPath);
            if (!file.exists() && !file.isDirectory()) {
            	file.mkdir();
            }
			for (DataPackageERP data: list) {
				ftpClient.changeWorkingDirectory("/");
	            ftpClient.changeWorkingDirectory(data.getFolderpath());
	            File localFile = new File(localPath + File.separatorChar + data.getSpmch().trim() + data.getImageid().trim() + data.getExtend());  
	            OutputStream os = new FileOutputStream(localFile);  
	            ftpClient.retrieveFile(data.getImageid() + data.getExtend(), os);  
	            os.close();  
			}
            ftpClient.logout();
  
        } catch (SocketException e) {  
            logger.error("连接FTP失败.");  
            e.printStackTrace();  
        } catch (IOException e) {  
            e.printStackTrace();  
            logger.error("文件读取错误。");  
            e.printStackTrace();  
        }  finally {
            if(ftpClient.isConnected()) {
                try {
                	ftpClient.disconnect();
                } catch(IOException ioe) {
                }
              }
        }
    }  
  
}  